/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package daw.bean;

import java.io.Serializable;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Christian
 */
@Entity
@Table(name = "denuncia")
@NamedQueries(

{@NamedQuery(name = "Denuncia.findAll", query = "SELECT d FROM Denuncia d")
		 , @NamedQuery(name = "Denuncia.findByIdDenuncia", query = "SELECT d FROM Denuncia d WHERE d.idDenuncia = :idDenuncia")
		 , @NamedQuery(name = "Denuncia.findByDescripcion", query = "SELECT d FROM Denuncia d WHERE d.descripcion = :descripcion")
		 , @NamedQuery(name = "Denuncia.findByFechaDelito", query = "SELECT d FROM Denuncia d WHERE d.fechaDelito = :fechaDelito")
		 , @NamedQuery(name = "Denuncia.findByRangoFechaDelito", query = "SELECT d FROM Denuncia d WHERE d.fechaDelito between :fechaDelitoInicio and :fechaDelitoFin")
		 , @NamedQuery(name = "Denuncia.findByFechaDenuncia", query = "SELECT d FROM Denuncia d WHERE d.fechaDenuncia = :fechaDenuncia")
		 , @NamedQuery(name = "Denuncia.findByDireccion", query = "SELECT d FROM Denuncia d WHERE d.direccion = :direccion")
		 , @NamedQuery(name = "Denuncia.findByCoordenada", query = "SELECT d FROM Denuncia d WHERE d.coordenada = :coordenada")
		 , @NamedQuery(name = "Denuncia.findByDenunciaLegal", query = "SELECT d FROM Denuncia d WHERE d.denunciaLegal = :denunciaLegal")
		 , @NamedQuery(name = "Denuncia.findByIdCiudad", query = "SELECT d FROM Denuncia d WHERE d.idArea.idCiudad.idCiudad = :idCiudad")
		 , @NamedQuery(name = "Denuncia.findByUrlFoto", query = "SELECT d FROM Denuncia d WHERE d.urlFoto = :urlFoto")})
public class Denuncia implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idDenuncia")
    private Integer idDenuncia;
    @Basic(optional = false)
    @Column(name = "descripcion")
    private String descripcion;
    @Basic(optional = false)
    @Column(name = "fechaDelito")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaDelito;
    @Basic(optional = false)
    @Column(name = "fechaDenuncia")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaDenuncia;
    @Basic(optional = false)
    @Column(name = "direccion")
    private String direccion;
    @Column(name = "coordenada")
    private String coordenada;
    @Basic(optional = false)
    @Column(name = "denunciaLegal")
    private boolean denunciaLegal;
    @Column(name = "urlFoto")
    private String urlFoto;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idDenuncia")
    private List<Objeto> objetoCollection;
    @JoinColumns({@JoinColumn(name = "idDelito", referencedColumnName = "idDelito"), @JoinColumn(name = "idSubDelito", referencedColumnName = "idSubDelito")})
    @ManyToOne(optional = false)
    private DelitoSubdelito delitoSubdelito;
    @JoinColumn(name = "idArea", referencedColumnName = "idArea")
    @ManyToOne(optional = false)
    private Area idArea;
    @JoinColumn(name = "idUsuario", referencedColumnName = "idUsuario")
    @ManyToOne(optional = false)
    private Usuario idUsuario;

    public Denuncia() {
    }

    public Denuncia(Integer idDenuncia) {
        this.idDenuncia = idDenuncia;
    }

    public Denuncia(Integer idDenuncia, String descripcion, Date fechaDelito, Date fechaDenuncia, String direccion, boolean denunciaLegal) {
        this.idDenuncia = idDenuncia;
        this.descripcion = descripcion;
        this.fechaDelito = fechaDelito;
        this.fechaDenuncia = fechaDenuncia;
        this.direccion = direccion;
        this.denunciaLegal = denunciaLegal;
    }

    public Integer getIdDenuncia() {
        return idDenuncia;
    }

    public void setIdDenuncia(Integer idDenuncia) {
        this.idDenuncia = idDenuncia;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Date getFechaDelito() {
        return fechaDelito;
    }

    public void setFechaDelito(Date fechaDelito) {
        this.fechaDelito = fechaDelito;
    }

    public Date getFechaDenuncia() {
        return fechaDenuncia;
    }

    public void setFechaDenuncia(Date fechaDenuncia) {
        this.fechaDenuncia = fechaDenuncia;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getCoordenada() {
        return coordenada;
    }

    public void setCoordenada(String coordenada) {
        this.coordenada = coordenada;
    }

    public boolean getDenunciaLegal() {
        return denunciaLegal;
    }

    public void setDenunciaLegal(boolean denunciaLegal) {
        this.denunciaLegal = denunciaLegal;
    }

    public String getUrlFoto() {
        return urlFoto;
    }

    public void setUrlFoto(String urlFoto) {
        this.urlFoto = urlFoto;
    }

    public List<Objeto> getObjetoCollection() {
        return objetoCollection;
    }

    public void setObjetoCollection(List<Objeto> objetoCollection) {
        this.objetoCollection = objetoCollection;
    }

    public DelitoSubdelito getDelitoSubdelito() {
        return delitoSubdelito;
    }

    public void setDelitoSubdelito(DelitoSubdelito delitoSubdelito) {
        this.delitoSubdelito = delitoSubdelito;
    }

    public Area getArea() {
        return idArea;
    }

    public void setArea(Area idArea) {
        this.idArea = idArea;
    }

    public Usuario getUsuario() {
        return idUsuario;
    }

    public void setUsuario(Usuario idUsuario) {
        this.idUsuario = idUsuario;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idDenuncia != null ? idDenuncia.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Denuncia)) {
            return false;
        }
        Denuncia other = (Denuncia) object;
        if ((this.idDenuncia == null && other.idDenuncia != null) || (this.idDenuncia != null && !this.idDenuncia.equals(other.idDenuncia))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "daw.bean.Denuncia[idDenuncia=" + idDenuncia + "]";
    }

    public String toXML(){
        String xml = "<denuncia>";
        xml+="<iddenuncia>"+getIdDenuncia()+"</iddenuncia>";
        xml+="<coordenada>"+getCoordenada()+"</coordenada>";
        xml+="<iddelito>"+getDelitoSubdelito().getDelitoSubdelitoPK().getIdDelito()+"</iddelito>";
        xml+="<idsubdelito>"+getDelitoSubdelito().getDelitoSubdelitoPK().getIdSubDelito()+"</idsubdelito>";
        xml+="<denuncialegal>"+getDenunciaLegal()+"</denuncialegal>";
        xml+="<descripcion>"+getDescripcion()+"</descripcion>";
        xml+="<direccion>"+getDireccion()+"</direccion>";
        xml+="<fechadelito>"+getFechaDelito()+"</fechadelito>";
        xml+="<fechadenuncia>"+getFechaDenuncia()+"</fechadenuncia>";
        xml+="<idarea>"+getArea().getIdArea()+"</idarea>";
        xml+="<idusuario>"+getUsuario().getIdUsuario()+"</idusuario>";
        xml+="<urlfoto>"+getUrlFoto()+"</urlfoto>";
        return xml;
    }

    public static String DenunciaCollectionToXML(List<Denuncia> denuncias){
        String xml="<denuncias>";
        Iterator i = denuncias.iterator();
        while(i.hasNext()){
            Denuncia c = (Denuncia)i.next();
            xml+=c.toXML();
        }
        xml+="</denuncias>";
        return xml;
    }

    public String getLatitud(){
        String cadena = getCoordenada();
        if(cadena==null)
            return null;
        String[] latitud = cadena.split(",");
        if(latitud.length==0) return null;
        return latitud[0];
    }

    public String getLongitud(){        
        String cadena = getCoordenada();
        if(cadena==null)
            return null;
        String[] longitud = cadena.split(",");
        if(longitud.length==0) return null;
        return longitud[1];
    }
}
